namespace SolidMvvmInterfaces {
	using System;
	using System.Collections.Generic;

	/// <summary>
	/// </summary>
	public interface ISettingDictionary : ISetting, IEnumerable<KeyValuePair<string, ISetting>> {
		/// <summary>
		/// </summary>
		/// <param name="key"> </param>
		/// <returns> </returns>
		ISetting this[string key] { get; set; }

		/// <summary>
		/// </summary>
		/// <param name="key"> </param>
		/// <param name="value"> </param>
		void Add(string key, ISetting value);

		/// <summary>
		/// </summary>
		void Clear();

		/// <summary>
		/// </summary>
		/// <param name="key"> </param>
		/// <returns> </returns>
		bool ContainsKey(string key);

		bool GetAsBool(string key, bool fallback);

		double GetAsDouble(string key, double fallback);

		T GetAsEnum<T>(string key, T fallback) where T : struct;

		long GetAsLong(string key, long fallback);

		string GetAsString(string key, string fallback);

		/// <summary>
		/// </summary>
		/// <param name="key"> </param>
		/// <returns> </returns>
		bool Remove(string key);

		void Save();

		void SetAsBool(string key, bool value);

		void SetAsDouble(string key, double value);

		void SetAsEnum(string key, Enum value);

		void SetAsLong(string key, long value);

		void SetAsString(string key, string value);
	}
}
